﻿using System;
using System.Html.DOM;

namespace Mojo
{
    public class AppController
    {
        /// <summary>
        /// Function to get the stage controller for a stage.
        /// </summary>
        /// <param name="stageName">The name of the stage.</param>
        /// <returns>Returns undefined if the stage does not exist, or is not yet fully constructed.</returns>
        public StageController GetStageControllerfunction(string stageName)
        {
            return null;
        }

        /// <summary>
        /// Function to close a stage.
        /// </summary>
        /// <param name="stageName">The name of the stage.</param>
        public void CloseStage(string stageName)
        {
        }


        /// <summary>
        /// close all stages.
        /// </summary>
        public void CloseAllStages()
        {
        }

        /// <summary>
        /// Show the message text from the bannerParams in the banner area. The launchArguments will be used to launch or relaunch the applicationif the banner is touched.
        /// New banners of each category will replace existing banners of the same category.
        /// </summary>
        /// <param name="bannerParams">message text</param>
        /// <param name="launchArguments">Arguments sent to the application when it is launched or relaunched if the banner is touched.</param>
        /// <param name="category">
        /// Value defined by the application. It is used if you have more than one kind of banner message. 
        ///        Without categories, any banner shown would replace an existing banner that had not yet been shown.
        /// defaults to 'banner'
        /// </param>
        public void ShowBanner(string bannerParams, string launchArguments, string category)
        {
        }

        /// <summary>
        /// Show the message text from the bannerParams in the banner area. The launchArguments will be used to launch or relaunch the applicationif the banner is touched.
        /// New banners of each category will replace existing banners of the same category.
        /// </summary>
        /// <param name="bannerParams">an object with the following properties:
        ///     messageText: text to display
        ///     soundClass: string containing the sound class to use
        ///     soundFile: partial or full path to a sound file to play
        ///     icon: partial or full path to an icon to show
        ///     soundDuration: duration of sound in milliseconds
        /// </param>
        /// <param name="launchArguments">Arguments sent to the application when it is launched or relaunched if the banner is touched.</param>
        /// <param name="category">
        /// Value defined by the application. It is used if you have more than one kind of banner message. 
        ///        Without categories, any banner shown would replace an existing banner that had not yet been shown.
        /// defaults to 'banner'
        /// </param>
        public void ShowBanner(object bannerParams, string launchArguments, string category)
        {
        }

        /// <summary>
        /// Remove a banner from the banner area. The category parameter defaults to 'banner'. Will not remove messages that are already displayed.
        /// </summary>
        /// <param name="category">Value defined by the application and usually same one used in showBanner. It is used if you have more than one kind of banner message. </param>
        public void removeBanner(string category)
        {
        }

        /// <summary>
        /// Remove all pending banner messages from the banner area. Will not remove messages that are already displayed.
        /// </summary>
        public void RemoveAllBanners()
        {
        }

        /// <summary>
        /// Immediately play a notification sound
        /// </summary>
        /// <param name="soundClass">soundClass class of the sound; supported classes are: "ringtones", "alerts", "alarm", "calendar", "notification"</param>
        /// <param name="soundFile">soundFile partial or full path to the sound file</param>
        /// <param name="soundDurationInMs">duration of sound in ms</param>
        public void PlaySoundNotification(string soundClass, string soundFile, string soundDurationInMs)
        {
        }

        public void SendToNotificationChain(object notificationData)
        {
        }

        /// <summary>
        /// return the first currently focused stage.
        /// </summary>
        /// <param name="stageType">stageType optional parameter to limit the focused stage returned to the specified type</param>
        /// <returns></returns>
        public StageController GetActiveStageController(StageType stageType)
        {
            return null;
        }

        /// <summary>
        /// Launch another application, with optional parameters.
        /// </summary>
        /// <param name="appId">appId Application ID of application to launch.</param>
        /// <param name="param">params Launch parameters to send to the launched application.</param>
        /// <returns>The Mojo.Service.Request object used to make the launch request.</returns>
        public Mojo.Service.Request Launch(string appId, object param)
        {
            return null;
        }

        /// <summary>
        /// Launch an application appropriate for "opening" the data indicated in the launch parameters.
        /// </summary>
        /// <param name="param">params Launch parameters to send to the opening application</param>
        /// <returns>The Mojo.Service.Request object used to make the launch request.</returns>
        public Mojo.Service.Request Open(object param)
        {
            return null;
        }

        /// <summary>
        /// Returns the current orientation of the physical screen.
        /// </summary>
        /// <returns>one of 'up', 'down', 'left', or 'right'.</returns>
        public string GetScreenOrientation()
        {
            return null;
        }

        public bool IsMinimal()
        {
            return false;
        }
    }
}
